home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / fractal / kaos.lha / complib / rungekutta_int_one.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-11-18  |  1.0 KB  |  50 lines

  1. /*
  2. ### My Runge-Kutta one stepper ###
  3. */
  4.  
  5. rungekutta_int_one(vx1,vx,ptime,time_step,dim)
  6. double vx1[],vx[],*ptime, time_step;
  7. int dim;
  8. {
  9.     static int icnt=0;
  10.     int i;
  11.     static double *v1,*v2,*sum,*dvector();
  12.     double time_step0,time_step2;
  13.     extern int model;
  14.     extern int var_dim;
  15.     extern double *param;
  16.     extern int (*f_p)();
  17.  
  18.     
  19.     icnt++;
  20.     if(icnt==1){
  21.         v1 = dvector(0,var_dim-1);
  22.         v2 = dvector(0,var_dim-1);
  23.         sum = dvector(0,var_dim-1);
  24.     }
  25.     time_step0 = time_step * 2;
  26.     time_step2 = time_step/2;
  27.     (int) f_p(v1,0,vx,param,*ptime,dim);
  28.     for(i=0;i<dim;i++){
  29.         sum[i] = time_step * v1[i];
  30.         v1[i] = vx[i] + time_step2 * v1[i];
  31.     }
  32.     *ptime += time_step2;
  33.     (int) f_p(v2,0,v1,param,*ptime,dim);
  34.     for(i=0;i<dim;i++) {
  35.         sum[i] += time_step0 * v2[i];
  36.         v2[i] = vx[i] + time_step2 * v2[i];
  37.     }
  38.     (int) f_p(v1,0,v2,param,*ptime,dim);
  39.     for(i=0;i<dim;i++){
  40.         sum[i] += time_step0 * v1[i];
  41.         v1[i] = vx[i] + time_step * v1[i];
  42.     }
  43.     *ptime += time_step2;
  44.     (int) f_p(v2,0,v1,param,*ptime,dim);
  45.     for(i=0;i<dim;i++){
  46.         sum[i] += time_step * v2[i];
  47.         vx1[i] = vx[i] + sum[i]/6.;
  48.     }
  49. }
  50.